package com.yang.design_patterns.observer;


/**
 * 观察者管理接口, 用于指定数据源应该具有的方法;
 *   其实就是数据源需要实现的接口,或者说是业务代码类需要实现的接口;
 *   然后通过这个接口来管理我这个业务类的观察者,和通知观察者;
 * @Author: 杨 强
 * @CreateTime: 2022-11-09 11:38
 */
public interface Subject {
    /**
     * 数据源(业务方)执行
     * 注册观察者到观察者列表中
     * 观察者想要获取业务(数据源)数据时调用此方法注册
     * @param observer
     */
    void registerObserver(Observer observer);

    /**
     * 数据源(业务方)执行
     * 从观察者列表移除观察者
     * 观察者不再需要业务(数据源)数据时，退出注册
     * @param observer
     */
    void removeObserver(Observer observer);

    /**
     * 向观察者列表的所有观察者发送数据
     * 数据源(业务)向注册在案的所有观察者发送数据
     * @param message
     */
    void notifyObservers(Message message);

}
